package com.demo.java.alg;

/**
 * 问题描述：
 * 给定一个随机函数f，以p概率返回0，以1-p概率返回1，这是你唯一可以使用的随机机制，如何实现等概率返回0和1。
 *
 * 构造二进制数，10和01等概率，只需要第一个数和第二个数不一样即返回0或1，否则继续生成。
 */
public class ProbabilityNumber {

    public static int random() {
        return Math.random() < 0.99 ? 0 : 1;
    }

    public static int b() {
        int ans = 0;
        do {
            ans = (random() << 1) + random();
        } while(ans == 0 || ans == 3);
        return ans == 1 ? 0 : 1;
    }
    public static void main(String[] args) {
        int[] test = new int[2];
        int testNum = 1000000;
        for (int i = 0; i < testNum; i++) {
            test[b()]++;
        }
        for (int i = 0; i < test.length; i++) {
            System.out.println(i + " : " + test[i]);
        }
    }
}
